home *** CD-ROM | disk | FTP | other *** search
- {
- FRED JOHNSON
-
- > Can anyone shed some light on creating a front-end loader for a Pascal .EXE
- > file?
-
- {
- *** Here is a piece of code that expresses the basic concept for which
- *** you are looking. It takes a text file (.msg) you supply and performs
- *** an extremely simple encription on it and attaches a display method
- *** and a password you supply. It then makes a .COM file that displays
- *** the file contents once you enter the correct password.
- *** The code is very inefficient, but written that way to show the method
- *** used to write the ASM code to the file. A better way to do this would
- *** be to place your standard ASM code in an array and increment a
- *** pointer to each command as you write it to the disk. Let me know if
- *** you want to see a rewrite.
- }
- Uses
- DOS,
- CRT;
-
- VAR
- FName,
- RName : File Of Byte;
- B, Q : Byte;
- Password : String[10];
- I_name : String[12];
- J : Integer;
-
- PROCEDURE Z;
- Begin
- Write(FName, Q);
- End;
-
- Begin
- ClrScr;
- Write('Input file name (extension must be .msg) : ');
- Readln(I_name);
- Assign(FName, I_name + '.com');
- Assign(RName, I_name + '.msg');
- ReWrite(FName);
- Reset(RName);
- Write('What is the Password you wish to use? 1 - 9 characters :');
- Readln(Password);
- B := Length(Password);
- J := 1;
- {***********************************************************************}
- Q := $b4; Z; Q := $0a; Z; { MOV AH,0A }
- Q := $ba; Z; Q := $4b; Z; Q := $01; Z; { MOV DX,014B }
- Q := $cd; Z; Q := $21; Z; { INT 21 }
- Q := $BE; Z; Q := $4D; Z; Q := $01; Z; { MOV SI,014D }
- Q := $8A; Z; Q := $04; Z; { MOV AL,[SI] }
- Q := $3C; Z; Q := $24; Z; { CMP AL,24 }
- Q := $74; Z; Q := $07; Z; { JZ 0117 }
- Q := $04; Z; Q := $08; Z; { ADD AL,08 }
- Q := $88; Z; Q := $04; Z; { MOV [SI],AL }
- Q := $46; Z; { INC SI }
- Q := $EB; Z; Q := $F3; Z; { JMP 010A }
- Q := $B8; Z; Q := $03; Z; Q := $00; Z; { MOV AX,0003 }
- Q := $CD; Z; Q := $10; Z; { INT 10 }
- Q := $B9; Z; Q := B; Z; Q := $00; Z; { MOV CX,length of Password }
- Q := $BE; Z; Q := $4d; Z; Q := $01; Z; { MOV SI,014c }
- Q := $BF; Z; Q := $57; Z; Q := $01; Z; { MOV DI,0148 }
- Q := $F3; Z; { REPZ }
- Q := $A6; Z; { CMPSB }
- Q := $75; Z; Q := $1b; Z; { JNZ 014a }
- Q := $BE; Z; Q := $61; Z; Q := $01; Z; { MOV SI,0161 }{message start}
- Q := $8A; Z; Q := $04; Z; { MOV AL,[SI] }
- Q := $3C; Z; Q := $24; Z; { CMP AL,24 }
- Q := $74; Z; Q := $07; Z; { JZ 013a }
- Q := $34; Z; Q := $02; Z; { XOR AL,02 }
- Q := $88; Z; Q := $04; Z; { MOV [SI],AL }
- Q := $46; Z; { INC SI }
- Q := $EB; Z; Q := $F3; Z; { JMP 012d }
- Q := $B4; Z; Q := $09; Z; { MOV AH,09 }
- Q := $BA; Z; Q := $61; Z; Q := $01; Z; { MOV DX,0161 }{message start}
- Q := $CD; Z; Q := $21; Z; { INT 21 }
- Q := $31; Z; Q := $C0; Z; { XOR AX,AX }
- Q := $CD; Z; Q := $16; Z; { INT 16 }
- Q := $B8; Z; Q := $03; Z; Q := $00; Z; { MOV AX,0003 }
- Q := $CD; Z; Q := $10; Z; { INT 10 }
- Q := $CD; Z; Q := $20; Z; { INT 20 }
- {************************************************************************}
- Q := B + 1;
- Z;
- Q := $24;
- For B := 1 to 11 do
- Z;
- For B := 1 to Length(Password) Do
- Begin
- Q := Ord(Password[B]) + 8;
- Z;
- End;
- While Length(Password) < 10 Do
- Begin
- Password := Password + '$';
- Z;
- End;
- While Not EOF(RName) Do
- Begin
- Read(RName, B);
- If B <> 26 Then
- Begin
- Q := B XOr 2;
- Z;
- Inc(J);
- End;
- End;
- Q := $24;
- Z;
- Close(RName);
- Close(FName);
- End.